package cn.deschen.common.utils;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

/**
 * @Author hanbin_chen
 * @Description 日期工具
 * @DateTime 2021/6/1
 * @Version V1.0.0
 */
public class DateUtil {

	/**
	 * 用于覆盖默认的公共空构造
	 */
	private DateUtil() {

	}

	/**
	 * 1天的秒数:86400
	 * 24L * 60 * 60L;
	 */
	public static final Long DAY_SECOND = 86400L;

	/**
	 * 1小时的秒数:3600
	 */
	public static final Long HOUR_SECOND = 3600L;

	/**
	 * 1小时的毫秒数:3600000
	 * 60L * 60L * 1000L
	 */
	public static final Long HOUR_MILLISECOND = 3600000L;
	
	/**
	 * 1天的毫秒数:86400000
	 * 24L * 60L * 60L * 1000L;
	 */
	public static final Long DAY_MILLISECOND = 86400000L;

	/**
	 * 日期时间格式，yyyy-MM-dd HH:mm:ss
	 */
	public static final String DATE_TIME_FORMATTER = "yyyy-MM-dd HH:mm:ss";

	/**
	 * 日期时间格式，yyyy-MM-dd
	 */
	public static final String DATE_DATE_FORMATTER = "yyyy-MM-dd";

	/**
	 * 日期时间格式，带毫秒 yyyy-MM-dd HH:mm:ss:SSS
	 */
	public static final String DATE_TIME_MMILLIS_FORMATTER = "yyyy-MM-dd HH:mm:ss:SSS";

	/**
	 * 时间格式，无符号 yyyyMMddHHmmss
	 */
	public static final String DATETIME_FORMATTER = "yyyyMMddHHmmss";
	/**
	 * 日期格式，无符号 yyyyMMdd
	 */
	public static final String DATE_FORMATTER = "yyyyMMdd";

	/**
	 * 时间格式，无符号，带毫秒 yyyyMMddHHmmssSSS
	 */
	public static final String DATETIMEMILLIS_FORMATTER = "yyyyMMddHHmmssSSS";


	/**
	 * 根据格式转换
	 * @param time 时间戳（单位：毫秒）
	 * @param formatter 时间格式
	 * @return
	 */
	public static String convertTimeToString(Long time, String formatter) {
		DateTimeFormatter ftf = DateTimeFormatter.ofPattern(formatter);
		return ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()));
	}



}
